package timehelp

import "time"

var (
	formatDateTime = "2006-01-02 15:04:05"
)

func DateTimeToStr(tDatetime time.Time) string {
	return tDatetime.Format(formatDateTime)
}

func StrToDateTime(sDateTime string) (time.Time, error) {
	return time.ParseInLocation(formatDateTime, sDateTime, time.Local)
}

func GetSimpleTimeNow() string {
	return time.Now().Format(formatDateTime)
}

// GetHeightByTime ...
func GetHeightByTime(t time.Time) int64 {
	var height int64 = 0
	loc, _ := time.LoadLocation("Asia/Shanghai") //设置时区
	tbegin, _ := time.ParseInLocation("2006-01-02 15:04:05", "2020-08-25 06:00:00", loc)
	tend, _ := time.ParseInLocation("2006-01-02 15:04:05", t.Format("2006-01-02 15:04:05"), loc)
	height = (tend.Unix() - tbegin.Unix()) / 30
	return height
}

// GetTimeByHeight ...
func GetTimeByHeight(height int64) time.Time {
	loc, _ := time.LoadLocation("Asia/Shanghai") //设置时区
	tbegin, _ := time.ParseInLocation("2006-01-02 15:04:05", "2020-08-25 06:00:00", loc)
	//fmt.Println(timehelp.Unix((tbegin.Unix() + height*30), 0).Format("2006-01-02 15:04:05"))
	return time.Unix((tbegin.Unix() + height*30), 0)
}

// FormatStrTime 格式化字符串时间
// 参数format：格式，如 2006-01-02 15:04:05，2006-01-02，2006-01
func FormatStrTime(str, format string) (time.Time, error) {
	return time.ParseInLocation(format, str, time.Local)
}

// FormatDateTime 返回指定格式的时间字符串
// 参数format：格式，如 2006-01-02 15:04:05，2006-01-02，2006-01
func FormatDateTime(t time.Time, format string) string {
	return t.Format(format)
}

// GetFirstDateOfMonth 获取传入的时间所在月份的第一天，即某月第一天的0点。如传入time.Now(), 返回当前月份的第一天0点时间。
func GetFirstDateOfMonth(d time.Time) time.Time {
	d = d.AddDate(0, 0, -d.Day()+1)
	return GetZeroTime(d)
}

// GetLastDateOfMonth 获取传入的时间所在月份的最后一天，即某月最后一天的0点。如传入time.Now(), 返回当前月份的最后一天0点时间。
func GetLastDateOfMonth(d time.Time) time.Time {
	return GetFirstDateOfMonth(d).AddDate(0, 1, -1)
}

// GetZeroTime 获取某一天的0点时间
func GetZeroTime(d time.Time) time.Time {
	return time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, d.Location())
}
